//
// Created by Jisam on 01/09/2024 8:39 AM.
// Solution of  P5194 [USACO05DEC]Scales
// 2024-09-01 09:14:10 AC 100 忘记开longlong + 题目理解错误
//#pragma GCC optimize(3)
#include <bits/stdc++.h>

using namespace std;
#define endl "\n"
#define PSI pair<string,int>
#define PII pair<int,int>
#define PDI pair<double,int>
#define PDD pair<double,double>
#define VVI vector<vector<int>>
#define VI vector<int>
#define VS vector<string>
#define PQLI priority_queue<int, vector<int>, less<int>>
#define PQGI priority_queue<int, vector<int>, greater<int>>
#define code_by_jisam ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
typedef long long i64;
typedef unsigned u32;
typedef unsigned long long u64;
typedef __int128 i128;
int dx[] = {-1, 1, 0, 0, 1, 1, -1, -1,};
int dy[] = {0, 0, -1, 1, 1, -1, -1, 1,};
i64 ans = 0;

// 定义最大数组长度常量，用于存储数组和中间结果
const int MAXN =  1e3 + 5;
// 定义数组用于存储原始数组和累积和，以及输入的n和c的值
i64 a[MAXN],sum[MAXN],n, c;

/**
 * 使用深度优先搜索策略来寻找满足条件的最大和
 * @param cur 当前搜索到的位置
 * @param x 当前累积的和
 */
void dfs(int cur ,i64 x){
    // 如果当前和超过c，则返回
    if(x > c) return;
    // 如果当前累积和加上前一项的和小于等于c，则更新答案
    if(sum[cur - 1] + x <= c){
        ans = max(ans,sum[cur - 1] + x);
        return;
    }
    // 更新答案
    ans = max(ans,x);
    // 遍历之前的所有项，递归调用dfs函数
    for(int i = 1 ; i < cur; i ++){
        dfs(i, x + a[i]);
    }
}

/**
 * 解决方案的入口函数
 */
void solution() {
    // 读取输入的n和c的值
    cin >> n >> c;
    // 读取原始数组，并计算累积和
    for(int i = 1; i <= n ; i ++){
        cin >> a[i];
        sum[i] = a[i] + sum[i - 1];
    }
    // 从位置n+1开始搜索，初始累积和为0
    dfs(n + 1,0);
    // 输出答案
    cout << ans;
}


int main() {
    code_by_jisam;
    int T = 1;
//    cin >> T;
    while (T--) {
        solution();
    }
    return 0;
}